package com.cg.asm.core.config.mvc;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 多个拦截器组成一个拦截器链
        // addPathPatterns 用于添加拦截规则
        // excludePathPatterns 用于排除拦截
        registry.addInterceptor(accessControlConfigurer()).addPathPatterns("/**");
        registry.addInterceptor(apiSecurityConfigurer()).addPathPatterns("/auth/**")
                .excludePathPatterns("/auth/session/sessionUserInfoByAsm", "/auth/session/pwdEnCoder");
    }

    @Bean
    public ApiSecurityConfigurer apiSecurityConfigurer() {
        return new ApiSecurityConfigurer();
    }

    @Bean
    public AccessControlConfigurer accessControlConfigurer() {
        return new AccessControlConfigurer();
    }

}
